export default {
  // 开启命名空间
  namespaced: true,

  // state 数据
  state: () => ({
    // 3. 是否登陆，如果不存在就直接判断为未登录
    isLogin: JSON.parse( uni.getStorageSync('isLogin') || '0' ) ,
    // 登录成功之后的 token 字符串
    token: uni.getStorageSync('token') || '',
    // 用户的基本信息
    userInfo: JSON.parse( uni.getStorageSync('userInfo') || '{}' ),
    // 患者信息
    patientInfo: JSON.parse( uni.getStorageSync('patientInfo') || '{}' ),
    // 重定向的 object 对象 { openType, from }
    redirectInfo: null,
    // 是否登出,如果不存在直接判断为登出
    // isLoginout: JSON.parse( uni.getStorageSync('isLoginout') || '1' )
  }),

  // 方法
  mutations: {
    // 登出方法
    loginout(state) {
      state.patientInfo = {};
      state.isLogin = 0;
      state.token = "";
      state.userInfo = {};
      // state.isLoginout = 1;
      this.commit('m_user/savePatientInfoToStorage');
      this.commit('m_user/saveIsLoginToStorage');
      this.commit('m_user/saveUserInfoToStorage');
      this.commit('m_user/saveTokenToStorage');
      // this.commit('m_user/saveIsLoginoutToStorage');
    },

    // updateIsLoginout(state, isLoginout) {
    //   state.isLoginout = isLoginout;
    //   this.commit('m_user/saveIsLoginoutToStorage');
    // },

    // 保存登出信息
    // saveIsLoginoutToStorage(state) {
    //   uni.setStorageSync('isLoginout', JSON.stringify(state.isLoginout));
    // },

    // 更新患者信息
    updatePatientInfo(state, patientInfo) {
      state.patientInfo = patientInfo;
      this.commit('m_user/savePatientInfoToStorage');
    },

    // 保存患者信息到本地缓存中
    savePatientInfoToStorage(state) {
      uni.setStorageSync('patientInfo', JSON.stringify(state.patientInfo));
    },

    // 更新isLogin
    updateIsLogin(state, isLogin) {
      state.isLogin = isLogin;
      this.commit('m_user/saveIsLoginToStorage');
    },

    saveIsLoginToStorage(state) {
      uni.setStorageSync('isLogin', JSON.stringify(state.isLogin));
    },

    // 更新用户的基本信息
    updateUserInfo(state, userInfo) {
      state.userInfo = userInfo;
      // 通过 this.commit() 方法，调用 m_user 模块下的 saveUserInfoToStorage 方法，将 userinfo 对象持久化存储到本地
      this.commit('m_user/saveUserInfoToStorage');
    },

    // 修改用户头像
    updateUserAvatar(state, avatar) {
      state.userInfo.avatar = avatar;
      this.commit('m_user/saveUserInfoToStorage');
    },

    // 修改用户头像
    updateUserNickname(state, nickname) {
      state.userInfo.nickname = nickname;
      this.commit('m_user/saveUserInfoToStorage');
    },

    // 将 userinfo 持久化存储到本地
    saveUserInfoToStorage(state) {
      uni.setStorageSync('userInfo', JSON.stringify(state.userInfo))
    },

    // 更新 token 字符串
    updateToken(state, token) {
      state.token = token
      // 通过 this.commit() 方法，调用 m_user 模块下的 saveTokenToStorage 方法，将 token 字符串持久化存储到本地
      this.commit('m_user/saveTokenToStorage');
    },

    // 将 token 字符串持久化存储到本地
    saveTokenToStorage(state) {
      uni.setStorageSync('token', state.token)
    },

    // 更新重定向的信息对象
    updateRedirectInfo(state, info) {
      state.redirectInfo = info
    },

    // 跳转到某个页面
    redirectPage(state) {
      console.log(state.redirectInfo);
      if (state.redirectInfo && state.redirectInfo.openType === 'switchTab') {
        // 跳转到对应的页面
        uni.switchTab({
          // 要导航到的页面地址
          url: state.redirectInfo.from,
        });
      } else if (state.redirectInfo && state.redirectInfo.openType === 'redirectTo') {
        // 跳转到登陆页面
        uni.redirectTo({
          // 要导航到的页面地址
          url: state.redirectInfo.from,
        });
      } else {
        uni.switchTab({
          // 要导航到的页面地址
          url: '/pages/home/home',
        })
      }
      // 重新设置redirectInfo
      this.commit('m_user/updateRedirectInfo', null);
    },

    // 跳转到登陆页面
    redirectLoginAsync(state, currentTabPath) {
      // console.log('跳转到登陆页面');
      const that = this;
      const f1 = state.isLogin == 1;
      const f2 = state.token && state.token.length > 0;
      const flag = f1 && f2;
      return new Promise((resolve, reject) => {
        if (!flag) {
          // 记录要跳转的页面
          const data = {
            from: currentTabPath,
            openType: "switchTab"
          }
          that.commit('m_user/updateRedirectInfo', data);
          uni.redirectTo({
            url: '/pages/login/login',
            success: () => {
              resolve(true); // 登陆页面跳转成功
            },
            fail: (error) => {
              reject(error); // 登陆页面跳转失败
            }
          });
        } else {
          resolve(false); // 无需跳转
        }
      });
    },

  }
}